
#ifndef CONFIG_H
#define CONFIG_H

namespace fx
{
    FX_DECLARE_CLASS(Config);

    class Config
        : public boost::noncopyable
    {
    public:
        static ConfigPtr Create();

        bool LoadFile(const std::string& filename);
        bool SaveFile(const std::string& filename);

        bool HasKey(const std::string& key) const;
        std::string GetString(const std::string& key) const;
        bool SetString(const std::string& key, const std::string& value);

        template <typename T>
        T GetValue(const std::string& key) const;
        template <typename T>
        bool SetValue(const std::string& key, const T& value);

    private:
        typedef std::map<std::string, std::string> NameValueMap;
    };
}

#endif//CONFIG_H
